package 笔试.广联达笔试.变为不重复序列;

import java.util.LinkedHashMap;
import java.util.Scanner;

//作者：sky游荡
//链接：https://www.nowcoder.com/discuss/462506?type=post&order=time&pos=&page=1&channel=666&source_id=search_post
//来源：牛客网
//
//给出一个序列，里面有元素相同，我们要得到元素各不相同的序列，进行这样的操作，
//令x为序列中最小的有重复数字，你需要删除序列左数第一个x并把第二个x换为2*x。
//列入原来是[2,2,1,1,1]，一次変换变为[2,2,2,1],两次变为【4,2,1】变换结束。
//5
//5 5 5 5 4
//输出
//20 4
public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int n = Integer.valueOf(sc.nextLine());
        while (sc.hasNext())
        {

            String[] split = sc.nextLine().split(" ");
            int[] arr = new int[split.length];

            for (int i = 0; i < arr.length; i++)
            {
                arr[i] = Integer.valueOf(split[i]);
            }
            LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();


            //存入到hashmap里面，2=2,1=3
            //取最小的，if最小的value>=2，则value-2，key为当前key*2的value+1
            //如何取得最小值，每次遍历是否复杂度过高，没必要每次取最小，只要全部遍历完
            for (int i = 0; i < arr.length; i++)
            {
                while (map.containsKey(arr[i]))
                {
                    arr[map.get(arr[i])] = -1;
                    map.remove(arr[i]);
                    arr[i] = arr[i] * 2;
                }
                map.put(arr[i], i);
            }

            for (int i = 0; i < arr.length; i++)
            {
                if (arr[i] != -1)
                {
                    System.out.print(arr[i] + " ");
                }
            }
            System.out.println();

        }
    }

}
